## Contents

*   [1 Краткое вступление](#.D0.9A.D1.80.D0.B0.D1.82.D0.BA.D0.BE.D0.B5_.D0.B2.D1.81.D1.82.D1.83.D0.BF.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5)
*   [2 Для кого предназначено данное руководство?](#.D0.94.D0.BB.D1.8F_.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.B5.D0.B4.D0.BD.D0.B0.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.BE_.D0.B4.D0.B0.D0.BD.D0.BD.D0.BE.D0.B5_.D1.80.D1.83.D0.BA.D0.BE.D0.B2.D0.BE.D0.B4.D1.81.D1.82.D0.B2.D0.BE.3F)
*   [3 Установка необходимых инструментов](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.BD.D0.B5.D0.BE.D0.B1.D1.85.D0.BE.D0.B4.D0.B8.D0.BC.D1.8B.D1.85_.D0.B8.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.BE.D0.B2)
*   [4 Использование acpi_listen](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_acpi_listen)
*   [5 Настройка ACPID](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_ACPID)
*   [6 Устаревшее: пример скрипта](#.D0.A3.D1.81.D1.82.D0.B0.D1.80.D0.B5.D0.B2.D1.88.D0.B5.D0.B5:_.D0.BF.D1.80.D0.B8.D0.BC.D0.B5.D1.80_.D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0)

## Краткое вступление

Многие руководства описывают процесс настройки мультимедийных клавиш с использованием таких программ как xev или keyTouch. Настоящая статья поясняет использование утилиты **acpi_listen** и создание вашего собственного скрипта для горячих клавиш.

## Для кого предназначено данное руководство?

Данный метод предполагает, что сигналы с клавиатуры передаются через acpi. Если вам неизвестно, как это происходит в вашей системе, то полезно обратиться к статьям:

*   Using Multimedia Keys in Linux
*   Hotkeys
*   Extra Keyboard Keys - keyTouch

## Установка необходимых инструментов

Скорее всего, все необходимое уже присутствует на вашей машине, но для уверенности лучше выполнить

```
$ sudo pacman -S acpi acpid acpitool

```

[Данная статья](/index.php/ACPI_modules "ACPI modules") рассказывает, какие модули вам необходимо загрузить (например, в `/etc/rc.conf` или через **modprobe**).

## Использование acpi_listen

Из-под суперпользователя или же из-под обычного, но с достаточными привилегиями доступа к устройствам ввода, выполните:

```
# acpi_listen

```

Если при нажатии особой клавиши, например "Следующий" ("Next") или "Предыдущий" ("Previous") на экране появляются строки, похожие на:

```
hkey VALZ 00000000 00000b31

```

значит все в порядке и можно продолжать.

## Настройка ACPID

Демон ACPI реагирует на события ACPI в соответствии с содержимым файла `handler.sh`, который находится в `/etc/acpi/handler.sh`

Вы можете либо редактировать его непосредственно, либо указать в нем другой скрипт (например `/etc/acpi/hotkeys.sh`)

В файл `/etc/acpi/hotkeys.sh` нужно добавить следующие строки:

```
hkey)
:case "$4" in
::00000b31)
::echo "PreviousButton pressed!"
::exailectl p
::;;
:00000b32)
::echo "NextButton pressed!"
::exailectl n
::;;
:00000b33)
::echo "Play/PauseButton pressed!"
::exailectl pp
::echo "executed.."
::;;
:00000b30)
::echo "StopButton pressed!"
::exailectl s
::;;
:*)
::echo "Hotkey Else: $4"
::;;
:esac
:;;

```

Значения "00000b31" и тому подобные представляют собой ответ, полученный от **acpi_listen**. "$4" представляет собой последнюю часть строки "hkey VALZ 00000000 00000b31" и различает мультимедийные клавиши.

К тому же можно создать краткий shell-скрипт для управления медиа проигрывателем (на примере Exaile), который назовем exailectl. Так как ACPID запускается от суперпользователя, то вызов Exaile нужно выполнить командой:

```
$ sudo -u (имя пользователя) exaile

```

В противном случае acpi не сможет обнаружить нашу плеер, работающий на пользовательском уровне запуска, и воссоздаст другой процесс.

## Устаревшее: пример скрипта

Так как keyTouch и другие программы для работы с клавиатурой у меня либо не заработали, либо работали не совсем хорошо, то перед редактированием `handler.sh` я создал свой скрипт, запускающийся в фоне и непосредственно реагирующий на вывод **acpi_listen**. Это не совсем правильный способ, так как его работа постоянно нагружала мой ноутбук. Но так или иначе я привожу данный скрипт, поэтому вы можете использовать или изменять его для себя, а также добавлять свои предложения по его улучшению. Он создан для ноутбука Toshiba Satellite A50 и управляет плеером Exaile, но его легко изменить для управления Amarok, Xine или даже приспособить для немультимедийных программ.

```
export STOP_MYHOTKEY=0
i=`acpi_listen -c 1`
case "$i"
in
:"hkey VALZ 00000000 00000b31")
::#echo "PREVIOUS"
::exaile -p
::;;
:"hkey VALZ 00000000 00000b32")
::#echo "NEXT"
::exaile -n
::;;
:"hkey VALZ 00000000 00000b33")
::exaile -t
::;;
:"hkey VALZ 00000000 00000b30")
::#echo "STOP"
::exaile -s
::;;
:*)
::#echo "ELSE: $i"
::;;
esac
e=`echo $STOP_MYHOTKEY`
if [ "$e" != "1" ]
then
:./myHotkey.sh &
fi

```

Указание: скрипт необязательно запускать из-под суперпользователя, если вы можете получать ответ **acpi_listen** из-под обычного пользовательского аккаунта (снова подразумевается, что для него возможен доступ к устройствам ввода).